<?php
/**
 * @package Joostina BOSS
 * @copyright Авторские права (C) 2008-2010 Joostina team. Все права защищены.
 * @license Лицензия http://www.gnu.org/licenses/gpl-2.0.htm GNU/GPL, или help/license.php
 * Joostina BOSS - свободное программное обеспечение распространяемое по условиям лицензии GNU/GPL
 * Joostina BOSS основан на разработках Jdirectory от Thomas Papin
 */
defined('_VALID_MOS') or die();
if (!defined('BOSS_MULTISELECT_LOADED')) {

    define('BOSS_MULTISELECT_LOADED', 1);

    class BossMultiSelect {
        //отображение поля в категории
        function getListDisplay($directory, $content, $field, $field_values, $itemid, $conf) {
            return $this->getDetailsDisplay($directory, $content, $field, $field_values, $itemid, $conf);
        }

        //отображение поля в контенте
        function getDetailsDisplay($directory, $content, $field, $field_values, $itemid, $conf) {
            $fieldname = $field->name;
            $value = (isset ($content->$fieldname)) ? $content->$fieldname : '';
            $return = '';
            if (isset($field_values[$field->fieldid])) {

                if(!empty($field->text_before))
                    $return .= '<span>'.$field->text_before.'</span>';
                if(!empty($field->tags_open))
                    $return .= html_entity_decode($field->tags_open);

                        for ($i = 0, $nb = count($field_values[$field->fieldid]); $i < $nb; $i++) {
                        $fieldvalue = @$field_values[$field->fieldid][$i]->fieldvalue;
                        $fieldtitle = @$field_values[$field->fieldid][$i]->fieldtitle;

                            if (strpos($value, "," . $fieldvalue . ",") !== false) {
                                $return .= jdGetLangDefinition($fieldtitle);
                                if(!empty($field->tags_separator) && $i < ($nb-1))
                                    $return .= html_entity_decode($field->tags_separator);
                            }
                        }
                    }

            if(!empty($field->tags_close))
                $return .= html_entity_decode($field->tags_close);
            if(!empty($field->text_after))
                $return .= '<span>'.$field->text_after.'</span>';

            return $return;
        }

        //функция вставки фрагмента ява-скрипта в скрипт
        //сохранения формы при редактировании контента с фронта.
        function addInWriteScript($field){

        }

        //отображение поля в админке в редактировании контента
        function getFormDisplay($directory, $content, $field, $field_values, $nameform = 'adminForm', $mode = "write") {
            $fieldname = $field->name;
            $value = (isset ($content->$fieldname)) ? $content->$fieldname : '';
            $strtitle = htmlentities(jdGetLangDefinition($field->title), ENT_QUOTES, 'utf-8');
            $return = '';
            if (($mode == "write") && ($field->editable == 0))
                    $disabled = "disabled=true";
                else
                    $disabled = "";

                if (($mode == "write") && ($field->required == 1))
                    $return = "<select id=\"" . $field->name . "[]\" name=\"" . $field->name . "[]\" mosReq='1' mosLabel='" . $strtitle . "' multiple='multiple' size='$field->size' class='boss_required' $disabled>\n";
                else
                    $return = "<select id='" . $field->name . "[]' name=\"" . $field->name . "[]\" mosLabel='" . $strtitle . "' multiple='multiple' size='$field->size' class='boss' $disabled>\n";

                if ($value == "")
                    $return .= "<option value=''>&nbsp;</option>\n";
                if (isset($field_values[$field->fieldid])) {
                    foreach ($field_values[$field->fieldid] as $v) {
                        $ftitle = jdGetLangDefinition($v->fieldtitle);
                        if (($mode == "write") && ($field->required == 1))
                            $mosReq = "mosReq='1'";

                        if (($mode == "write") && (strpos($value, "," . $v->fieldvalue . ",") === false))
                            $return .= "<option value='" . $v->fieldvalue . "' >$ftitle</option>\n";
                        else
                            $return .= "<option value='" . $v->fieldvalue . "' selected='selected' >$ftitle</option>\n";
                    }
                }

                $return .= "</select>\n";

            return $return;
        }

        function onFormSave($directory, $contentid, $field, $isUpdateMode, $itemid) {
            $return = mosGetParam($_POST, $field->name, array());
            $return = "," . implode(',', $return) . ",";
            return $return;
        }

        function onDelete($directory, $contentid = -1) {
            return;
        }

        function getEditFieldJavaScriptDisable() {
            return;
        }

        function getEditFieldJavaScriptActive() {
            $return  = "disableAll();
                    elem = getObject('divValues');
                    elem.style.visibility = 'visible';
                    elem.style.display = 'block';
                    if (elem = getObject('vNames[0]')) {
                        elem.setAttribute('mosReq', 1);
                    }
                    if (elem = getObject('vValues[0]')) {
                        elem.setAttribute('mosReq', 1);
                    }";
            return $return;
        }

        //отображение поля в админке в настройках поля
        function getEditFieldOptions($fieldid, $directory) {
            $return = "";
            return $return;
        }

        //действия при сохранении настроек поля
        function saveFieldOptions($directory, $field) {
            $fieldValues = array();
	        $fieldNames  = array();
            $fieldNames  = $_POST['vNames'];
	        $fieldValues = $_POST['vValues'];
            $database = database::getInstance();
            $j=0;
			$i=0;
			while(isset($fieldNames[$i])) {
				$fieldName  = $fieldNames[$i];
				$fieldValue = $fieldValues[$i];
				$i++;

				if(trim($fieldName)!=null && trim($fieldName)!='') {
					$database->setQuery( "INSERT INTO #__boss_".$directory."_field_values (fieldid,fieldtitle,fieldvalue,ordering)"
							. " VALUES('$field->fieldid','".htmlspecialchars($fieldName)."','".htmlspecialchars($fieldValue)."',$j)"
					);
					if(!$database->loadResult()) echo $database->getErrorMsg();
					$j++;
				}
			}
            //если плагин не создает собственных таблиц а пользется таблицами босса то возвращаем false
            //иначе true
            return false;
        }

        //имя типа поля в выпадающем списке в настройках поля
        function getFieldName() {
            return "Drop Down (Multi-Select)";
        }

        //действия при установке плагина
        function install($directory) {
            return;
        }

        //действия при удалении плагина
        function uninstall($directory) {
            return;
        }
        //действия при поиске
        function search($directory,$fieldName) {
            $search = '';
            $value = mosGetParam( $_REQUEST, $fieldName, array() );
					for($i = 0,$nb=count($value);$i < $nb;$i++) {
						if ($i == 0)
							$search .= " AND (";
						$search .= "a.$fieldName LIKE '%,$value[$i],%'";
						if ($i < $nb - 1)
							$search .= " OR ";
						else
							$search .= " )";
					}
            return $search;
        }
    }
}
$bossPlugins['multiselect'] = new BossMultiSelect();
?>